Sản phẩmTích hợpTài nguyênTài liệuGiá cả
Bắt đầu ngay

© 2026 CapSolver. All rights reserved.

Liên hệ chúng tôi

Slack: lola@capsolver.com

Sản phẩm

  • reCAPTCHA v2
  • reCAPTCHA v3
  • Cloudflare Turnstile
  • Cloudflare Challenge
  • AWS WAF
  • Tiện ích trình duyệt
  • Thêm nhiều loại CAPTCHA

Tích hợp

  • Selenium
  • Playwright
  • Puppeteer
  • n8n
  • Đối tác
  • Xem tất cả tích hợp

Tài nguyên

  • Chương trình giới thiệu
  • Tài liệu
  • Tham chiếu API
  • Blog
  • Câu hỏi thường gặp
  • Thuật ngữ
  • Trạng thái

Pháp lý

  • Điều khoản dịch vụ
  • Chính sách bảo mật
  • Chính sách hoàn tiền
  • Không bán thông tin cá nhân của tôi
Blog//Thu thập dữ liệu từ web trong Golang với Colly
Jul04, 2024

Thu thập dữ liệu từ web trong Golang với Colly

Aloísio Vítor

Aloísio Vítor

Image Processing Expert

Web scraping là một phương pháp được sử dụng để trích xuất dữ liệu từ các trang web. Trong Golang, thư viện Colly là một công cụ phổ biến để web scraping nhờ vào tính đơn giản và tính năng mạnh mẽ. Hướng dẫn này sẽ dẫn bạn qua việc thiết lập một dự án Golang với Colly, xây dựng một trình trích xuất cơ bản, xử lý các tình huống trích xuất dữ liệu phức tạp và tối ưu trình trích xuất của bạn với các yêu cầu đồng thời.

Thiết lập Dự án Golang của bạn

Trước khi bắt đầu, hãy đảm bảo rằng bạn đã cài đặt Go trên hệ thống của mình. Khởi tạo dự án của bạn và tải về gói Colly với các lệnh sau:

bash Copy
go mod init my_scraper
go get -u github.com/gocolly/colly

Điều này thiết lập thư mục dự án của bạn và cài đặt gói Colly.

Nhận Mã Khuyến Mãi CapSolver

Tăng ngân sách tự động hóa của bạn ngay lập tức!
Sử dụng mã khuyến mãi CAPN khi nạp tiền vào tài khoản CapSolver để nhận thêm 5% khuyến mãi cho mỗi lần nạp — không giới hạn.
Nhận mã khuyến mãi ngay bây giờ trong Bảng điều khiển CapSolver
.

Xây dựng Trình Trích Xuất Cơ Bản

Hãy tạo một trình trích xuất cơ bản để trích xuất tất cả các liên kết từ một trang Wikipedia cụ thể.

  1. Tạo một tệp mới main.go và thêm mã sau:
go Copy
package main

import (
    "fmt"
    "github.com/gocolly/colly"
)

func main() {
    c := colly.NewCollector(
        colly.AllowedDomains("en.wikipedia.org"),
    )

    c.OnHTML(".mw-parser-output", func(e *colly.HTMLElement) {
        links := e.ChildAttrs("a", "href")
        fmt.Println(links)
    })

    c.Visit("https://en.wikipedia.org/wiki/Web_scraping")
}

Mã này khởi tạo một bộ thu thập Colly bị giới hạn bởi en.wikipedia.org, sau đó thiết lập một hàm gọi lại để tìm và in tất cả các liên kết bên trong phần div .mw-parser-output của trang.

Trích xuất Dữ Liệu Bảng

Đối với các nhiệm vụ phức tạp hơn như trích xuất dữ liệu bảng và ghi nó vào tệp CSV, bạn có thể sử dụng gói encoding/csv trong Go:

  1. Mở rộng main.go với mã sau để trích xuất dữ liệu bảng:
go Copy
package main

import (
    "encoding/csv"
    "log"
    "os"
    "github.com/gocolly/colly"
)

func main() {
    fName := "data.csv"
    file, err := os.Create(fName)
    if err != nil {
        log.Fatalf("Could not create file, err: %q", err)
        return
    }
    defer file.Close()

    writer := csv.NewWriter(file)
    defer writer.Flush()

    c := colly.NewCollector()

    c.OnHTML("table.wikitable", func(e *colly.HTMLElement) {
        e.ForEach("tr", func(_ int, row *colly.HTMLElement) {
            rowData := []string{}
            row.ForEach("td", func(_ int, cell *colly.HTMLElement) {
                rowData = append(rowData, cell.Text)
            })
            writer.Write(rowData)
        })
    })

    c.Visit("https://en.wikipedia.org/wiki/List_of_programming_languages")
}

Mã này trích xuất dữ liệu bảng từ một trang Wikipedia và ghi nó vào tệp data.csv.

Thực Hiện Yêu Cầu Đồng Thời

Để tăng tốc độ trích xuất, bạn có thể thực hiện các yêu cầu đồng thời bằng cách sử dụng goroutines của Go. Dưới đây là cách bạn có thể trích xuất nhiều trang đồng thời:

go Copy
package main

import (
    "fmt"
    "github.com/gocolly/colly"
    "sync"
)

func scrape(url string, wg *sync.WaitGroup) {
    defer wg.Done()
    
    c := colly.NewCollector()
    
    c.OnHTML("title", func(e *colly.HTMLElement) {
        fmt.Println("Title found:", e.Text)
    })
    
    c.Visit(url)
}

func main() {
    var wg sync.WaitGroup
    urls := []string{
        "https://en.wikipedia.org/wiki/Web_scraping",
        "https://en.wikipedia.org/wiki/Data_mining",
        "https://en.wikipedia.org/wiki/Screen_scraping",
    }

    for _, url := range urls {
        wg.Add(1)
        go scrape(url, &wg)
    }

    wg.Wait()
}

Trong ví dụ này, chúng ta định nghĩa một hàm scrape nhận một URL và một nhóm chờ như các tham số. Hàm này khởi tạo một bộ thu thập Colly, thiết lập một hàm gọi lại để in tiêu đề của trang, và truy cập URL. Hàm main tạo một nhóm chờ, lặp qua danh sách các URL và khởi chạy một goroutine cho mỗi URL để trích xuất dữ liệu đồng thời.

Bằng cách tuân theo các bước này, bạn có thể xây dựng các trình trích xuất mạnh mẽ trong Golang sử dụng Colly, xử lý nhiều tình huống trích xuất dữ liệu khác nhau và tối ưu hiệu suất với các yêu cầu đồng thời. Để có các hướng dẫn chi tiết hơn và sử dụng nâng cao, hãy kiểm tra các tài nguyên về web scraping với Go và Colly.

Các Thư Viện Trích Xuất Web Khác Cho Go

Ngoài Colly, có một số thư viện tuyệt vời khác cho web scraping trong Golang:

  • GoQuery: Thư viện này cung cấp cú pháp và tính năng tương tự như jQuery, cho phép bạn thực hiện các thao tác trích xuất web dễ dàng, giống như bạn làm trong jQuery.
  • Ferret: Một hệ thống trích xuất web di động, mở rộng và nhanh chóng được thiết kế để đơn giản hóa việc trích xuất dữ liệu từ web. Ferret tập trung vào việc trích xuất dữ liệu bằng một ngôn ngữ khai báo độc đáo.
  • Selenium: Được biết đến với khả năng trình duyệt không đầu, Selenium lý tưởng cho việc trích xuất nội dung động. Mặc dù không có hỗ trợ chính thức cho Go, nhưng có một phiên bản được port để sử dụng trong các dự án Go.

Kết Luận

Web scraping là kỹ năng mạnh mẽ và thiết yếu để trích xuất dữ liệu hiệu quả từ các trang web. Sử dụng Golang và thư viện Colly, bạn có thể xây dựng các trình trích xuất mạnh mẽ có thể xử lý nhiều tình huống trích xuất dữ liệu, từ việc thu thập các liên kết đơn giản đến trích xuất dữ liệu bảng phức tạp và tối ưu hiệu suất với các yêu cầu đồng thời.

Trong hướng dẫn này, bạn đã học cách:

  1. Thiết lập một dự án Golang với thư viện Colly.
  2. Xây dựng một trình trích xuất cơ bản để trích xuất các liên kết từ một trang web.
  3. Xử lý các tình huống trích xuất dữ liệu phức tạp hơn, như trích xuất dữ liệu bảng và ghi nó vào tệp CSV.
  4. Tối ưu trình trích xuất của bạn bằng cách thực hiện các yêu cầu đồng thời.

Bằng cách tuân theo các bước này, bạn có thể tạo ra các trình trích xuất web hiệu quả và hiệu quả trong Golang, tận dụng tính đơn giản và tính năng mạnh mẽ của Colly. Để sử dụng nâng cao và hướng dẫn chi tiết hơn, hãy khám phá các tài nguyên bổ sung về web scraping với Go và Colly.

Câu hỏi Thường Gặp

1. Colly có phù hợp với người mới học web scraping trong Golang không?

Có. Colly được thiết kế để đơn giản và thân thiện với người mới, đồng thời vẫn cung cấp các tính năng mạnh mẽ như phân tích DOM, xử lý yêu cầu, hàm gọi lại và tính đồng thời. Người mới phát triển Go có thể nhanh chóng xây dựng một trình trích xuất hoạt động chỉ với vài dòng mã.


2. Colly có thể trích xuất nội dung có cấu trúc như bảng hoặc danh sách không?

Tuyệt đối. Colly cho phép chọn các nút HTML cụ thể và thuộc tính, điều này giúp việc trích xuất bảng, danh sách, liên kết và các phần tử có cấu trúc khác trở nên dễ dàng. Bạn cũng có thể lưu kết quả trực tiếp vào các tệp như CSV hoặc JSON bằng các thư viện chuẩn của Go.


3. Làm thế nào để tăng tốc trình trích xuất web của tôi bằng Colly?

Bạn có thể sử dụng goroutines của Go để xử lý nhiều trang cùng lúc. Bằng cách khởi chạy các trình trích xuất đồng thời và đồng bộ chúng bằng một nhóm chờ, hiệu suất trích xuất tăng lên đáng kể — đặc biệt là đối với các tập dữ liệu lớn hoặc các nhiệm vụ quét nhiều URL.

Xem thêm

web scrapingApr 22, 2026

Kiến trúc Trích xuất Dữ liệu Từ Web bằng Rust cho Trích xuất Dữ liệu Có Thể Mở Rộng

Học kiến trúc gỡ mã web Rust có thể mở rộng với reqwest, scraper, gỡ mã bất đồng bộ, gỡ mã trình duyệt không đầu, xoay proxy và xử lý CAPTCHA tuân thủ.

Anh Tuan
Anh Tuan
web scrapingFeb 17, 2026

Cách giải CAPTCHA trên Nanobot bằng CapSolver

Tự động hóa việc giải CAPTCHA với Nanobot và CapSolver. Sử dụng Playwright để giải reCAPTCHA và Cloudflare tự động.

Nội dung

Anh Tuan
Anh Tuan
web scrapingFeb 10, 2026

Dữ liệu dưới dạng dịch vụ (DaaS): Nó là gì và tại sao nó quan trọng vào năm 2026

Hiểu về Dịch vụ Dữ liệu (DaaS) vào năm 2026. Khám phá lợi ích, trường hợp sử dụng và cách nó thay đổi doanh nghiệp với phân tích thời gian thực và tính mở rộng.

Emma Foster
Emma Foster
web scrapingFeb 05, 2026

Cách sửa các lỗi thu thập dữ liệu web phổ biến vào năm 2026

Nắm vững việc sửa chữa các lỗi trình gỡ mã web đa dạng như 400, 401, 402, 403, 429, 5xx, và Cloudflare 1001 vào năm 2026. Học các chiến lược tiên tiến về chuyển đổi IP, tiêu đề, và giới hạn tốc độ thích ứng với CapSolver.

Nikolai Smirnov
Nikolai Smirnov
web scraping